package books.ThinkingInJava.src.Tools;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributeView;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;

public class FileKit {

    /**
     * 将windows系统的路径转换为Java可用的路径
     *
     * @param path 从windows文件管理器中直接复制的路径
     * @return 返回转换后的路径
     */
    public static String filePathTransfer(String path) {
        char[] chars = path.toCharArray();
        if (chars.length == 0) {
            return null;
        }
        for (int i = 0; i < chars.length - 1; i++) {
            if (chars[i] == '\\' && chars[++i] == '\\') {
                chars[i] = '/';
                chars[i] = 0;
            }
        }
        for (int i = 0; i < chars.length - 1; i++) {
            if (chars[i] == '\\') {
                chars[i] = '/';
            }
        }
        return new String(chars);
    }

    /**
     * 用于获取当前路径下所有的文件，返回类型为ArrayList
     *
     * @param filePath
     * @return 当前文件路径的所有同层次文件
     */
    public static ArrayList<File> getDirectory(File filePath) {
        if (filePath == null) {
            return null;
        }
        ArrayList<File> list = new ArrayList<File>();
        File[] fil = filePath.listFiles();
        filePath.getParentFile();
        for (File f : fil) {
            list.add(f);
        }
        return list;
    }

    /**
     * 获取顶层文件路径，只能到硬盘下二级文件，不能访问到一级文件
     *
     * @param filePath
     * @return
     */
    public static File getSourceDirectory(File filePath) {
        if (filePath == null) {
            return null;
        }
        File f1 = filePath, f2 = filePath;
        while (f1 != null) {
            f2 = f1;
            f1 = new File(filePath.getParent());
            if (f1.compareTo(f2) == 0) {
                break;
            }
        }
        return f2;
    }

    /**
     * @param filePath
     * @return
     */
    public static ArrayList<File> getAllFilesFromSourceDirectory(File filePath) {
        if (filePath == null) {
            return null;
        }
        ArrayList<File> files = new ArrayList<File>();
        files.add(filePath);

        while (files.isEmpty() == false) {

        }
        return files;
    }

    /**
     * 获取文件基本信息
     *
     * @param file
     * @return
     * @throws IOException
     */

    public static BasicFileAttributes getAttribute(File file) throws IOException {
        Path path = file.toPath();
        BasicFileAttributeView basicFileAttributeView = Files.getFileAttributeView(path, BasicFileAttributeView.class);
        BasicFileAttributes basicFileAttributes = basicFileAttributeView.readAttributes();
        return basicFileAttributes;
    }


}
